Apple 推出Universal Links (通用链接):一种能够方便的通过传统 HTTP 链接来启动 APP, 使用相同的网址打开网站和 APP。
通过唯一的网址, 不需要特别的schema就可以链接一个特定的视图到APP 里面 。比如:在知乎中使用了通用链接, 那么用户在Safari、UIWebView或者 WKWebView点击一个链接, iOS设备上的知乎app会在知乎里面自动打开这个页面, 如果没有安装则在Safrai中打开响应链接。
Step 1
创建一个json 格式的apple-app-site-associatio 文件
例如:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "9JA89QQLNQ.com.apple.wwdc",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
},
{
"appID": "ABCD1234.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}
appID构成 TeamID(你的团队标识的).bundle idpaths键设定允许的路径列表, 或只是一个星号如果你想打开APP而不管路径是什么(注意区分大小写)
Step 2
上传 apple-app-site-association 文件
注意:
上传到
.well-known目录下 /.well-known/apple-app-site-associationweb server需要支持https,客户端需要通告https访问,并且不支持任何重定向。
Step 3
在 APP 里处理通用链接
必须在 Xcode 的 capabilities 里 添加你的 APP 域名, 必须用 applinks: 前置它:还添加一些你可能拥有的子域和扩展。
这将使APP从域名请求Step1中创建的JSON 文件 apple-app-site-association。当你第一次启动 APP,它会从 web server根目录下载这个文件。
Step 4
在 AppDelegate 里支持通用链接
1 | -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler{ |
当 userActivity 是 NSUserActivityTypeBrowsingWeb 类型, 则意味着它已经由通用链接 API 代理。这样的话, 它保证用户打开的 URL 将有一个非空的 webpageURL 属性。